home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Freeware 2002 November
/
SGI Freeware 2002 November - Disc 2.iso
/
dist
/
fw_glimpse.idb
/
usr
/
freeware
/
src
/
glimpse-3.0
/
agrep
/
io.c.z
/
io.c
Wrap
C/C++ Source or Header
|
1997-09-09
|
1KB
|
58 lines
/* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal. All Rights Reserved. */
#include "agrep.h"
/* AGREP_POINTER must be defined to be 1 always */
/* #define AGREP_POINTER 1 */
/* Removed since we now have a -DAGREP_POINTER=1 option in the Makefile */
fill_buf(fd, buf, record_size)
int fd, record_size;
unsigned char *buf;
{
int num_read=1;
int total_read=0;
if (fd >= 0) {
while(total_read < record_size && num_read > 0) {
num_read = read(fd, buf+total_read, record_size - total_read);
total_read = total_read + num_read;
}
}
#if AGREP_POINTER
else return 0; /* should not call this function if buf is a pointer to a user-specified region! */
#else /*AGREP_POINTER*/
else { /* simulate a file */
total_read = (record_size > (agrep_inlen - agrep_inpointer)) ? (agrep_len - agrep_inpointer) : record_size;
memcpy(buf, agrep_inbuffer + agrep_inpointer, total_read);
agrep_inpointer += total_read;
}
#endif /*AGREP_POINTER*/
return(total_read);
}
/*
* In these functions no allocs/copying is done when
* fd == -1, i.e., agrep is called to search within memory.
*/
alloc_buf(fd, buf, size)
int fd;
char **buf;
int size;
{
#if AGREP_POINTER
if (fd != -1)
#endif /*AGREP_POINTER*/
*buf = (char *)malloc(size);
}
free_buf(fd, buf)
int fd;
char *buf;
{
#if AGREP_POINTER
if (fd != -1)
#endif /*AGREP_POINTER*/
free(buf);
}